AWS CDK でカスタムリソースを使ってアカウントパスワードポリシーを設定してみた

AWS CDK でカスタムリソースを使ってアカウントパスワードポリシーを設定してみた

Clock Icon2025.01.17

こんにちは、製造ビジネステクノロジー部の若槻です。

アカウントパスワードポリシー を設定することにより、AWS アカウント内で作成される IAM ユーザーのパスワードポリシーを統一的に適用することができます。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_passwords_account-policy.html

今回は AWS CDK でカスタムリソースを使ってアカウントパスワードポリシーを設定してみました。

やってみた

CDK コード

AWS CDK のコード実装です。カスタムリソース作成時に onCreateupdateAccountPasswordPolicy を実行し、カスタムアカウントパスワードポリシーを作成します。また、削除時に onDelete で指定した deleteAccountPasswordPolicy を実行し、カスタムパスワードポリシーを削除してデフォルトに戻すようにしています。

lib/main-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as iam from 'aws-cdk-lib/aws-iam';
import * as cr from 'aws-cdk-lib/custom-resources';

export class MainStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props: cdk.StackProps) {
    super(scope, id, props);

    new cr.AwsCustomResource(this, 'PasswordPolicyUpdater', {
      onCreate: {
        service: 'IAM',
        action: 'updateAccountPasswordPolicy',
        parameters: {
          // パスワードの強度要件
          MinimumPasswordLength: 10, // パスワードの最小文字数
          RequireUppercaseCharacters: true, // 少なくとも 1 つのアルファベットの大文字 (A~Z) が必要
          RequireLowercaseCharacters: true, // 少なくとも 1 つのアルファベットの小文字 (a~z) が必要
          RequireNumbers: true, // 少なくとも 1 つの数字が必要
          RequireSymbols: true, // 少なくとも 1 つの英数字以外の文字が必要 (! @ # $ % ^ & * ( ) _ + - = [ ] {} | ')
          // その他の要件
          MaxPasswordAge: 90, // パスワードの有効期限(日)
          HardExpiry: false, // パスワードの有効期限切れ後に管理者のリセットが必要
          AllowUsersToChangePassword: true, // ユーザーにパスワードの変更を許可
          PasswordReusePrevention: 3, // パスワードの再利用を禁止する回数
        },
        physicalResourceId: cr.PhysicalResourceId.of(
          'AccountPasswordPolicyUpdater'
        ),
      },
      onDelete: {
        service: 'IAM',
        action: 'deleteAccountPasswordPolicy',
        physicalResourceId: cr.PhysicalResourceId.of(
          'AccountPasswordPolicyUpdater'
        ),
      },
      policy: cr.AwsCustomResourcePolicy.fromStatements([
        new iam.PolicyStatement({
          actions: [
            'iam:UpdateAccountPasswordPolicy',
            'iam:DeleteAccountPasswordPolicy',
          ],
          resources: ['*'],
        }),
      ]),
    });
  }
}

動作確認

カスタムリソースの作成前の

CDK デプロイをしてカスタムリソースを作成し、onCreate で指定した API updateAccountPasswordPolicy を実行します。

カスタムアカウントパスワードポリシーが設定されました。

カスタムパスワードポリシーの編集画面はこのようになっています。

続いてカスタムリソースを削除する CDK デプロイし、onDelete で指定した API deleteAccountPasswordPolicy を実行します。

カスタムパスワードポリシーを削除し、デフォルトのアカウントパスワードポリシーに戻すことができました。

おわりに

AWS CDK でカスタムリソースを使ってアカウントパスワードポリシーを設定してみました。

AWS 環境のセキュリティ強化において、IAM ユーザーのパスワードポリシーを適切に設定することは重要です。AWS CDK とカスタムリソースをを使えばその設定を IaC 化できるので、セキュリティポリシーの適用漏れを防ぐことができます。ぜひご活用ください。

参考

https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccountPasswordPolicy.html

以上

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.